# 多阶段构建：编译阶段 - 支持全架构
FROM golang:1.23-alpine AS builder

# 设置工作目录
WORKDIR /app

# 设置腾讯云镜像加速
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tencent.com/g' /etc/apk/repositories && \
    echo "https://mirrors.tencent.com/alpine/latest-stable/main" > /etc/apk/repositories && \
    echo "https://mirrors.tencent.com/alpine/latest-stable/community" >> /etc/apk/repositories

# 设置Go模块代理（使用腾讯镜像）
ENV GOPROXY=https://mirrors.tencent.com/go/,https://goproxy.cn,direct \
    GO111MODULE=on

# 安装必要的构建工具
RUN apk add --no-cache git ca-certificates tzdata wget

# 复制依赖文件
COPY go.mod go.sum ./

# 下载依赖
RUN go mod download

# 复制源代码
COPY . .

# 设置编译参数（支持全架构）
ENV CGO_ENABLED=0

# 编译二进制文件（默认支持当前架构）
RUN go build -ldflags='-w -s -extldflags "-static"' -a -installsuffix cgo -o ip .

# 运行阶段：使用轻量级基础镜像
FROM alpine:latest

# 维护者信息
LABEL maintainer="liumou <liumou.site@qq.com>"
LABEL version="1.9.0"
LABEL description="IP地址查询服务 - 轻量级Web应用"

# 安装运行时依赖
RUN apk --no-cache add ca-certificates tzdata wget

# 创建非root用户（安全最佳实践）
RUN addgroup -g 1000 -S appgroup && \
    adduser -u 1000 -S appuser -G appgroup

# 设置工作目录
WORKDIR /opt/ip

# 从构建阶段复制二进制文件
COPY --from=builder /app/ip /opt/ip/ip

# 复制静态资源
COPY --from=builder /app/static /opt/ip/static

# 设置文件权限
RUN chmod +x /opt/ip/ip && \
    chown -R appuser:appgroup /opt/ip

# 暴露端口（IPv4和IPv6双栈支持）
EXPOSE 22010 22011

# 切换到非root用户
USER appuser

# 健康检查配置
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
    CMD wget --no-verbose --tries=1 --spider http://localhost:22010/health || exit 1

# 环境变量配置
ENV IP_PORT=22010 \
    IP_DEBUG=false \
    IP_PID=false

# 启动命令
ENTRYPOINT ["/opt/ip/ip"]
# CMD ["-p", "22010"]

# 元数据
ARG BUILD_DATE
ARG VERSION
ARG VCS_REF
LABEL org.label-schema.build-date="$BUILD_DATE" \
      org.label-schema.name="IP地址查询服务" \
      org.label-schema.description="基于Gin框架的轻量级IP地址查询Web应用" \
      org.label-schema.url="https://github.com/liumou-site/go-ip-interface" \
      org.label-schema.vcs-ref="$VCS_REF" \
      org.label-schema.vcs-url="https://github.com/liumou-site/go-ip-interface.git" \
      org.label-schema.vendor="liumou" \
      org.label-schema.version="$VERSION" \
      org.label-schema.schema-version="1.0"